【JavaScript】例外処理(try-catch-finally) - 予期せぬエラーの対応処理
JavaScriptの例外処理について解説します。
検証環境
例外処理
例外処理は“例外が発生した際の復帰処理”のことです。
例外が発生した場合にプログラムが中断しないように例外処理を施します。
※ 致命的な(プログラムで対応できない)エラーは例外処理できません。
JavaScriptではtry-catch-finally文で例外処理を実現します。
基本構文
try {
// 処理...
} catch ( 変数 ) {
// 例外処理...
} finally {
// 処理...
}
例外処理はtryブロック、catchブロック、finallyブロックの3つのブロックから構成されます。
try
tryブロックは通常実行する処理を記述します。
このブロック内の処理で例外が発生した場合、以降の処理を中断してcatchブロックに移行します。
また、そのことを『例外のキャッチ』と呼びます。
catch
catchブロックは例外が発生した場合に実行する処理を記述します。
tryブロックで発生した例外はオブジェクトとして、引数のように変数で受け取って扱うことが可能です。
finally
finallyブロックは例外の発生有無に関わらず必ず実行する処理を記述します。
tryブロックまたはcatchブロックの終了後に実行されます。
なお、このブロックは必須ではありません。
サンプル
先ずは例外を発生するコードを確認しましょう。
let result = 0;
result = x + y;
console.log(result);
Uncaught ReferenceError: x is not defined
このコードは宣言されていない変数x
、y
を使用したことにより例外が発生します。
例外によりプログラムが中断されるため、console.log(result)
は実行されません。
例外から復帰するように例外処理を適用すると次のようなコードになります。
let result = 0;
___ih_hl_start
try {
result = x + y;
} catch( e ) {
console.log(e);
}
___ih_hl_end
console.log(result);
ReferenceError: x is not defined
0
変数e
には例外オブジェクトが与えられます。
catchブロックで出力するとエラーの内容が表示できます。
また、コンソールの0
はconsole.log(result)
の出力によるものです。
このように例外処理を施すことで、例外が発生してもプログラムを終了せずに復帰することができます。
また、さらにfinallyブロックを追加します。
console.log("START");
let result = 0;
try {
result = x + y;
} catch( e ) {
console.log(e);
} finally {
console.log("FINALLY");
}
console.log(result);
console.log("FINISH");
START
ReferenceError: x is not defined
at sample.js:3023:5
FINALLY
0
FINISH
実行結果からcatchブロックの終了後、finallyブロックが実行されたことが分かります。
例外が発生しないパターンも確認します。
console.log("START");
let result = 0;
___ih_diff_start
+let x = 1, y = 2;
___ih_diff_end
try {
result = x + y;
} catch( e ) {
console.log(e);
} finally {
console.log("FINALLY");
}
console.log(result);
console.log("FINISH");
START
FINALLY
3
FINISH
例外は発生しませんが、実行結果からfinallyブロックが実行されたことが分かります。